package cl.mt.mvc.helper;


import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import cl.mt.dto.DTOUsuario;
import cl.mt.proxy.ProxyParametro;


/**
 * Septiembre de 2009
 * @author Jorge Velasco
 */
public class EmailHelper implements Serializable {

    private boolean envioMailActivo() {
        ProxyParametro proxyParametro = ProxyParametro.getInstance();
        String mailActivo = proxyParametro.getValor("SMTP", "ACTIVO");
        return "SI".equals(mailActivo);
    }

    /*public String getMailDatosSolicitud(SolicitudDTO dtoSolicitud) {
        ProxyProducto proxyProduto = ProxyProducto.getInstance();
        ProxyPais proxyPais = ProxyPais.getInstance();
        ProxyRegion proxyRegion = ProxyRegion.getInstance();

        StringBuffer str = new StringBuffer();
        str.append("\n\nDatos de Producto:\n");
        str.append("\n\t- Producto: " + proxyProduto.getNombre(dtoSolicitud.getId()));
        str.append("\n\t- Cantidad: " + dtoSolicitud.getCantidad());
        str.append("\n\t- Descripcion: " + dtoSolicitud.getDescripcion());
        str.append("\n\n");
        str.append("\n\t- Pais: " + proxyPais.getNombre(dtoSolicitud.getId()));

        str.append("\n\t- Regiones: ");
        for (int i = 0; i < dtoSolicitud.getIdRegiones().size(); i++) {
            Long idRegion = (Long) dtoSolicitud.getIdRegiones().get(i);
            str.append("\n\t\t\t" + proxyRegion.getNombre(idRegion));
        }

        return str.toString();
    }
*/
    /*public String getMailDatosUsuario(SolicitudDTO dtoSolicitud) {
        StringBuffer str = new StringBuffer();

        ProxyUsuario proxyUsuario = ProxyUsuario.getInstance();
        UsuarioDTO dtoUser = proxyUsuario.getById(dtoSolicitud.getId());

        str.append("\nDatos de usuario:\n");
        str.append(
                "\n\t- Nombre: " + Utiles.sinNull(dtoUser.getNombre(), "") + " " + Utiles.sinNull(dtoUser.getApellidoPaterno(), "") + " " + Utiles.sinNull(dtoUser.getApellidoMaterno(), ""));
        str.append("\n\t- Email: " + Utiles.sinNull(dtoUser.getEmail(), ""));
        str.append("\n\t- Telefono: " + Utiles.sinNull(dtoUser.getAreaTelefono(), "") + " " + Utiles.sinNull(dtoUser.getTelefono(), ""));
        str.append("\n\t- Celular: " + Utiles.sinNull(dtoUser.getAreaCelular(), "") + " " + Utiles.sinNull(dtoUser.getCelular(), ""));
        return str.toString();

    }
*/
    

    public String getMailDatosUsuarioInactivo() {
        StringBuffer str = new StringBuffer();

        str.append("\nDatos de usuario:\n");
        str.append("\n\t Si usted desea poder participar en futuras cotizaciones, compre su plan en xxxxxxxxxxxxxxxx");

        return str.toString();

    }

    public void sendMail(String email, String msgUsuarioActivo) {

        System.out.println("Mail [" + email + "]");
        if (!envioMailActivo()) {
            return;
        }
        try {
            ProxyParametro proxyParametro = ProxyParametro.getInstance();

            // Construimos el mensaje
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("mastransporte.org"));
            msg.setRecipients(Message.RecipientType.TO, email);
            msg.setSubject("MasTrasnporte: Solicitud Cotizacion");
            msg.setSentDate(new Date());

            MimeBodyPart mbp = new MimeBodyPart();
            mbp.setText(msgUsuarioActivo);

            MimeMultipart multipart = new MimeMultipart();
            multipart.addBodyPart(mbp);
            msg.setContent(multipart);

            System.out.println("Envianado Mail [" + email + "]");
            transportMail.sendMessage(msg, msg.getAllRecipients());
            System.out.println("Enviado Mail [" + email + "]");
        } catch (AddressException e) {
            // TODO Bloque catch generado autom�ticamente
            e.printStackTrace();
        } catch (MessagingException e) {
            // TODO Bloque catch generado autom�ticamente
            e.printStackTrace();
        }

    }
    
    
    /**
     * map:
     * from
     * recipients
     * subject
     * text
     * 
     * @param mapMail
     */
    
    public boolean sendMail(Map mapMail) {

    	String from 		= (String) mapMail.get("from");
     	String recipients 	= (String) mapMail.get("recipients");
    	String subject 		= (String) mapMail.get("subject");
    	String text 		= (String) mapMail.get("text");
        
        if (!envioMailActivo()) {
            return false;
        }
        try {
            ProxyParametro proxyParametro = ProxyParametro.getInstance();

            // Construimos el mensaje
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("mastransporte.org"));
            msg.setRecipients(Message.RecipientType.TO, recipients);
            msg.setSubject(subject);
            msg.setSentDate(new Date());

            MimeBodyPart mbp = new MimeBodyPart();
            mbp.setText(text);

            MimeMultipart multipart = new MimeMultipart();
            multipart.addBodyPart(mbp);
            msg.setContent(multipart);

            System.out.println("Envianado Mail [" + recipients + "]");
            transportMail.sendMessage(msg, msg.getAllRecipients());
            System.out.println("Enviado Mail [" + recipients + "]");
        } catch (AddressException e) {
            // TODO Bloque catch generado autom�ticamente
           
        	e.printStackTrace();
        	return false;
            
        } catch (MessagingException e) {
            // TODO Bloque catch generado autom�ticamente
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public void sendMailTest(String emailDestino, String msg) {

        System.out.println("Mail [" + emailDestino + "]");

        try {
            if (transportMail == null) {
                getConnection();
            }
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(emailSender));
            message.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(emailDestino));
            message.setSubject("Testeando Mesnaje.");
            message.setText(msg);
            transportMail.sendMessage(message, message.getAllRecipients());
            close();
        } catch (AddressException e) {
            // TODO Bloque catch generado autom�ticamente
            e.printStackTrace();
        } catch (MessagingException e) {
            // TODO Bloque catch generado autom�ticamente
            e.printStackTrace();
        }

    }
    private Transport transportMail = null;
    private Session session = null;
    private String emailSender = "mastransporte@mastransporte.com";

    public void getConnection() throws NoSuchProviderException, MessagingException {
        if (!envioMailActivo()) {
            return;
        }
        ProxyParametro proxyParametro = ProxyParametro.getInstance();
        Properties properties = new Properties();
        properties.put("mail.smtp.host", proxyParametro.getValor("SMTP", "HOST"));
        //properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.port", new Integer(proxyParametro.getValor("SMTP", "PORT")));
        properties.put("mail.smtp.mail.sender", proxyParametro.getValor("SMTP", "USER"));
        properties.put("mail.smtp.user", proxyParametro.getValor("SMTP", "USER"));
        properties.put("mail.smtp.auth", "true");
        session = Session.getDefaultInstance(properties);
        session.setDebug(true);
        transportMail = session.getTransport("smtp");
        transportMail.connect(
                proxyParametro.getValor("SMTP", "HOST"),
                new Integer(proxyParametro.getValor("SMTP", "PORT")).intValue(),
                proxyParametro.getValor("SMTP", "USER"),
                proxyParametro.getValor("SMTP", "PASSWORD"));
    }

    public void close() throws MessagingException {

        if (!envioMailActivo()) {
            return;
        }
        if (transportMail == null) {
            return;
        }
        transportMail.close();
        transportMail = null;
    }
}